<?php
if (!defined('IN_SYS')) {
    header('HTTP/1.1 403 Forbidden');
    exit(0);
}

require_once './inc/err.inc.php';

/** 
* 聊天信息类
* 
* 发送/获取聊天信息
* @author xzqiapchu(www.xzzhangqiaochu.top)
* @version v1.0.0.200202_beta
*/
class Message
{
    /**
    * 初始化聊天记录文件
    *
    * 检查聊天记录文件是否存在，若不存在，则尝试创建之
    * @return void
    */
    static function reset()
    {
        //检查聊天记录文件是否存在
        if (!file_exists('./msg.php')) {
            $handle = fopen('./msg.php', 'w') or Err::sysErr('文件./msg.php创建失败！', __FILE__, __LINE__);
            $line = '<?php exit(0); ?>' . "\r\n"; //初始数据
            fwrite($handle, $line);
            fclose($handle);
        }
    }

    /**
    * 获取聊天记录
    *
    * 获取全部聊天记录（json格式）
    * @return string 聊天记录（json格式）
    */
    static function getAll()
    {
        Message::reset();
        $file = fopen('./msg.php', 'r') or Err::sysErr('文件./msg.php无读取权限！', __FILE__, __LINE__);
        fgets($file); //忽略第一行
        $data = '';
        while (!feof($file)) {
            $data .= fgets($file);
        }
        fclose($file);
        return $data;
    }

    /**
    * 获取聊天记录MD5值
    *
    * 本函数中调用了获取聊天记录函数
    * @return string 聊天记录MD5值
    */
    static function getMd5()
    {
        $data = Message::getAll();
        $data_md5 = md5($data);
        return $data_md5;
    }


    /** 
    * 聊天记录编码函数
    * 
    * 对将要添加的聊天记录进行编码，以防止XSS等攻击
    * @param string $msg 需要编码的信息（请传入文本形式的原始信息）
    * @return string 编码后的信息
    */
    static function encode($msg)
    {
        $msg_encode = htmlspecialchars($msg);
        return $msg_encode;
    }

    /**
    * 添加聊天记录
    *
    * 在聊天记录文件上进行追加
    * @param string $uid 用户id
    * @param string $uname 用户名
    * @param string $msg 待添加的聊天记录（为了安全，请先进行编码）
    */
    static function add($uid, $uname, $msg)
    {
        Message::reset();
        $msg = Message::encode($msg);
        $record['uid'] = $uid; 
        $record['uname'] = $uname;
        $record['msg'] = $msg;
        $record['time'] = date('Y-m-d H:i', time());
        $record['ip'] = $_SERVER['REMOTE_ADDR'];
        $line = json_encode($record) . "\r\n";
        $handle = fopen('msg.php', 'a') or Err::sysErr('文件msg.php无追加权限！', __FILE__, __LINE__);
        fwrite($handle, $line);
        fclose($handle);
    }
}
